/**
 * 可在对象上定义一个新属性，或者修改一个对象的现有描述符
 * 目标对象，通常是你要操作的那个对象实例
 * 属性名称，可以是一个字符串或Symbol，表示你想要定义或修改的属性名
 * 一个描述符对象，包含了关于属性的各种元数据
 */

const obj = {
  gender: "male",
};
Object.defineProperty(obj, "name", {
  value: "John Doe",
  enumerable: true, // 可枚举、可读
  writable: true, // 可更改
  configurable: true, // 可删除或编辑
});

// console.log(Object.getOwnPropertyDescriptors(obj)); // 所有属性的描述符
// console.log(Object.getOwnPropertyDescriptor(obj, "name")); // 单个属性的描述符

// 冻结
// console.log(Object.freeze(obj)); // configurable false、writable false
// console.log(Object.isFrozen(obj)); // 是否冻结

// 密封
// console.log(Object.seal(obj)); // configurable false
// console.log(Object.isSealed(obj)); // 是否密封
